package com.xiaogao.common.utils;

import com.xiaogao.common.exception.BusinessException;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.beanutils.BeanUtils;

import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.List;

@Slf4j
public class BeanListUtils {
    /**
     * 复制 List<T> 的方法，支持不同类之间的属性复制
     *
     * @param sourceList 源 List
     * @param targetClass 目标类的 Class 类型
     * @param <S>        源对象的类型
     * @param <T>        目标对象的类型
     * @return 复制后的 List
     */
    public static <S, T> List<T> copyList(List<S> sourceList, Class<T> targetClass) {
        List<T> copiedList = new ArrayList<>();
        try {
            for (S source : sourceList) {
                T targetInstance = targetClass.getDeclaredConstructor().newInstance(); // 创建新实例
                BeanUtils.copyProperties(targetInstance, source); // 复制属性
                copiedList.add(targetInstance); // 添加到新列表
            }
        } catch (InstantiationException | IllegalAccessException | InvocationTargetException |
                 NoSuchMethodException e) {
            log.error("属性拷贝异常:{}", e.getMessage());
            throw new BusinessException(500, e.getMessage());
        }
        return copiedList;
    }
}
